package DataStructureAndAlgorithm.CSP.Day01;

/*
将0、1、2、3四个数字分为(0,1)和(2,3)两组。再进行排列组合即可
不能直接暴力求解，时间直接爆
*/
import java.util.Scanner;
public class AcWing_3195 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int mod = 1000000007;
        int n = in.nextInt();
        int N = 1010;
        //以下是求组合数的代码。具体看基础课
        int[][] C = new int[N][N];
        for (int i = 0; i <= n; i++){
            for (int j = 0; j <= i; j++){
                if (j == 0){
                    C[i][j] = 1;
                }else {
                    C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
                }
            }
        }
        //下面按求出的组合数进行累加求和
        long res = 0;
        for (int k = 2; k <= n - 2; k++){
            res = (res + (long)C[n - 1][k] * (k - 1) % mod * (n - k - 1)) % mod;
        }
        System.out.print(res);
    }
}

/*
我们把一个数称为有趣的，当且仅当：

    它的数字只包含 0,1,2,3

，且这四个数字都出现过至少一次。
所有的 0
都出现在所有的 1 之前，而所有的 2 都出现在所有的 3
之前。
最高位数字不为 0

    。

因此，符合我们定义的最小的有趣的数是 2013

。

除此以外，4
位的有趣的数还有两个：2031 和 2301

。

请计算恰好有 n

位的有趣的数的个数。

由于答案可能非常大，只需要输出答案除以 109+7

的余数。
输入格式

输入只有一行，包括恰好一个正整数 n

。
输出格式

输出只有一行，包括恰好 n
位的整数中有趣的数的个数除以 109+7

的余数。
数据范围

4≤n≤1000

输入样例：

4

输出样例：

3

 */